1. Field of the Invention
The present invention relates generally to an improved method and system for data processing. More particularly, the present invention relates to a method and system to reduce thrashing in a multi-threaded programming environment.
2. Description of the Related Art
Many conventional data processing systems include operating systems which provide a multithreaded programming environment. Multithreading is the ability of an operating system to manage the use of a process by more than one entity (e.g. a user or another process) at a time or multiple requests for use by a single entity using a single copy of the process in memory. Each process managed by the operating system defines a virtual address space including code, data, and one or more threads associated with the process. Each thread within a process in turn defines a path of execution through the process and may include data processing system state (e.g. processor state) and a stack beginning at an aligned virtual address boundary. For example, under the Windows™ operating system available from Microsoft™ Corporation of Redmond, Wash., each thread's stack is created on a 1 MB (megabyte) boundary.
As a thread is executed on a processor, it accesses data at a location within its stack using the location's corresponding virtual addresses. In many modem data processing systems, the data may be stored in an entry within a virtually-addressable cache memory associated with the thread's processor which is indexed or “tagged” using the least significant bit(s) (e.g. the least significant 16 bits) of the data location's virtual address. In a data processing system having such a virtually-addressable cache memory shared among multiple physical or virtual processors, several threads may be created for a given process and the virtual addresses of corresponding locations within each thread's stack may be distinguishable only by the most significant bit(s) of the virtual address which designate the stack's starting boundary and initial stack pointer. As a result, thread execution and stack access within such multiprocessor data processing systems may cause shared, virtually-addressable caches to thrash.